A runtime is a software component that supports execution of computer programs written in a designated computer programming language. A continuation-based runtime models computer programs in terms of units of execution (e.g., activities) that abstract particular semantics of a given domain. These semantics may refer to basic control flow, primitives, or higher-level business functions. Such primitives often are of a generic nature, and such business functions often are domain-specific and/or business-specific. One example use of a continuation-based runtime is modeling of human workflows that represent business processes. Business processes commonly change to accommodate the ever-changing business environment and therefore generally are viewed as being intrinsically dynamic. A common requirement of business processes is the capability to make decisions dynamically in a data driven fashion. For example, a list of approvers selected to approve a corporate purchase may vary in time according to external conditions of the business (e.g., an approver may become ill, a new manager may be hired in a business unit associated with the purchase, etc.).
Programming structures, such as control flows, in a continuation-based runtime that are targeted to a declarative and visual programming experience have several challenges to support making decisions dynamically in a data driven fashion. Such a programming structure often is naturally static because the physical layout in the visualization has some form of direct coupling with the program execution flow. In one example, the dynamic addition of branches to a parallel primitive programming construct may be difficult to express in a two-dimensional visual canvas. In accordance with this example, the branches to be added may not be known at the time at which the parallel primitive programming construct is designed. In further accordance with this example, another set of constructs may be added to the parallel primitive programming construct to respond to administrative events.
When a programming structure that is targeted to a declarative and visual programming experience is modeled using existing primitives, the resulting model may be relatively complex, difficult to generate, and/or incomplete. For instance, the resulting model may not have access to subtle and fine-grain control flow aspects because the model may not provide a way to control the programming structure. In one example, the model may not provide a way to allow external users to manipulate a list of approvers, cancel, etc. Modeling a programming structure manually to react to (and handle) business events and administrative events may be relatively difficult, error prone, and/or not possible.